﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CHATCENTRAL.ENTITIES;
using ChatInterfaces;
using CHATCENTRAL.Interfaces.Mappers;
using CHATCENTRAL.Interfaces.Entities;

namespace CHATCENTRAL.MAPPERS
{
    class Tema_User_Mapper : ITema_User_Mapper
    {
        private static Tema_User_Mapper inst;

        private List<ITema_User> lstTemaUser;

        public static Tema_User_Mapper GetInstance()
        {

                if (inst == null)
                    inst = new Tema_User_Mapper();


            return inst;
        }

        private Tema_User_Mapper()
        {
            lstTemaUser = new List<ITema_User>();
        }

        public void AddTemaUser(ITema_User temaUser)
        {
            if (temaUser == null)
                throw new NullReferenceException();

            if (lstTemaUser.Contains(temaUser))
                throw new Exception("Este Utilizador ja está inscrito neste Tema");

            lstTemaUser.Add(temaUser);
        }

        public IEnumerable<IClient> getUsersByTemas(IEnumerable<ITema> temas, string username)
        {
            List<IClient> clients = lstTemaUser.Where(d => temas.Contains(d.tema) && d.user.IsOnline==true).Select(f => f.user).Distinct().ToList();

            //Remover-se a ele próprio
            //IClient client = clients.SingleOrDefault(d=>d.username == username);

            //if (client != null)
                //clients.Remove(client);

            return clients;
        }

        public IEnumerable<ITema> GetTemasForUser(string username)
        {
            return lstTemaUser.Where(d => d.user.username == username).Select(f => f.tema);
        }

        public IEnumerable<ITema_User> GetAllTemaUser()
        {
            return lstTemaUser;
        }
    }
}
